perm filename PH2S.BLI[AI,LCS] blob sn#812762 filedate 1983-01-12 generic text, type T, neo UTF8
!THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
!  OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.

!COPYRIGHT (C) DIGITAL EQUIPMENT CORPORATION 1972, 1983
!AUTHOR: S MURPHY/EGM/TFV

MODULE	PH2S(SREG=#17,VREG=#15,FREG=#16,DREGS=4,RESERVE(0,1,2,3),START,GLOROUTINES) =
BEGIN

SWITCHES NOLIST;
REQUIRE FIRST.BLI;
REQUIRE TABLES.BLI;
SWITCHES LIST;

GLOBAL BIND PH2SV = 7↑24 + 0↑18 + #1633;	! Version Date: 1-Sep-82

%(

***** Begin Revision History *****

30	-----	-----	DELETE REFERENCE TO NOFRTEMP

***** Begin Version 6 *****

31	1047	EGM	22-Jan-81	Q10-05325
	Add support for TOPS-10 execute only.

***** Begin Version 7 *****

32	1500	SRM	11-Feb-82
	Give CHO message if have bypassed the optimizer because of
	character data in program.

1633	TFV	1-Sep-82
	Count number of executable statements.

***** End Revision History *****

)%

%1633%	EXTERNAL STCNT;		! Number of executable statements

	EXTERNAL P2SKL1DISP;

%1500%	EXTERNAL FATLERR,E181;
%1500%	EXTERNAL TURNOFFOPT;	!Flag for /OPT turned off for this subroutine
				! because it had character data

%[1047]% PORTAL ROUTINE MRP2S =
BEGIN


%(****THIS MODULE MAKES A PASS OVER THE SOURCE PROGRAM, PERFORMING PHASE 2 SKEL
	AND COMMON SUBEXPR ELIMINATION FOR ALL STATEMENTS***)%
	EXTERNAL SEGINCORE,PHAZCONTROL;
	EXTERNAL P2SKSTMNT,CSTMNT;
	EXTERNAL LOCELIM;
	EXTERNAL MEMCMCHK;
	EXTERNAL BACKST,CORMAN,LENTRY,DOWDP,CDONODE;
	EXTERNAL MAKASSOC;	!ROUTINE TO SET UP LIST OF ALL ASSOCIATE VARS
				! IN THE PROGRAM

	MAP BASE CSTMNT;

	EXTERNAL INNERLOOP;	!GLOBAL FLAG THAT IS SET WHILE PROCESSING
				! STMNTS IN AN INNER LOOP

%1500%	! If we have bypassed the optimizer because of character data
%1500%	!  in the program, give a warning message
%1500%	IF .TURNOFFOPT
%1500%	THEN
%1500%	FATLERR(-1,E181<0,0>);

	%(***INIT GLOBALS USED BY COMMON SUBEXPR ELIM***)%
	NAME<LEFT>←SRCSIZ+ASGNSIZ;
	BACKST←CORMAN();
	LENTRY←0;

	%(***INIT GLOBAL USED BY THE ROUTINE THAT SUBSTITUTES REGCONTENTS NODES FOR DO
		CONTROL VARIABLE*****)%
	DOWDP←0;

	INNERLOOP←FALSE;	!INIT FLAG FOR "ARE CURRENTLY PROCESSING STMNTS
				! IN AN INNER LOOP"

	NAME<LEFT>←SRCSIZ+DOSIZ;	!MAKE A DUMMY DO STMNT WHICH HAS
					! ALL WDS ZERO
	CDONODE←CORMAN();		!INIT PTR TO "CURRENT INNER DO" TO PT
					! TO THIS DUMMY


	MAKASSOC();	!MAKE A LINKED LIST OF ALL ASSOCIATE VARS IN THE PROGRAM
			! (THIS LIST IS NEEDED BY THE BB REG ALLOCATOR)

	CSTMNT←.SORCPTR<LEFT>;			!GET PTR TO 1ST STMNT OF PROGRAM

	%(***SKIP 1ST STMNT WHICH IS ALWAYS A DUMMY CONTINUE***)%
	IF .CSTMNT NEQ 0
	THEN
	CSTMNT←.CSTMNT[SRCLINK];


	WHILE .CSTMNT NEQ 0
	DO
	BEGIN

%1633%		STCNT = .STCNT + 1;	! Count executable statements

		ISN←.CSTMNT[SRCISN];
		P2SKSTMNT();
		LOCELIM(.CSTMNT);		!PERFORM LOCAL COMMON SUBEXPR ELIM
		MEMCMCHK();			!DETECT OPS THAT CAN BE PERFORMED TO MEMORY
		CSTMNT←.CSTMNT[SRCLINK];
	END;

END;			!END OF MRP2S
MACHOP POPJ=#263;
MRP2S();
POPJ(#17,0)